home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-11 / clipss.zip / MISCSPRD.PRG < prev    next >
Text File  |  1991-09-19  |  6KB  |  250 lines

  1. /*****
  2.  *
  3.  * MISCSPRD.PRG
  4.  * Miscellaneous Functions
  5.  *
  6.  * Luiz F. Quintela
  7.  * Copyright (c) 1991 Nantucket Corporation.
  8.  *                    All Rights Reserved.
  9.  *
  10.  * RMAKE 789
  11.  *
  12.  */
  13.  
  14. #include "inkey.ch"
  15. #include "setcurs.ch"
  16. #include "error.ch"
  17. #include "sprdsht.ch"
  18.  
  19. /*****
  20.  *
  21.  * Cursor Movement Methods
  22.  *
  23.  */
  24.  
  25. FUNCTION MoveIt( nKey, oObj )
  26.    LOCAL  nFound
  27.    STATIC aCursorMethods := ;
  28.          { K_DOWN      , {|b| b:down()},;
  29.             K_UP        , {|b| b:up()},;
  30.             K_PGDN      , {|b| b:pageDown()},;
  31.             K_PGUP      , {|b| b:pageUp()},;
  32.             K_CTRL_PGUP , {|b| b:goTop()},;
  33.             K_CTRL_PGDN , {|b| b:goBottom()},;
  34.             K_RIGHT     , {|b| b:right()},;
  35.             K_LEFT      , {|b| b:left()},;
  36.             K_HOME      , {|b| b:home()},;
  37.             K_END       , {|b| b:end()},;
  38.             K_CTRL_LEFT , {|b| b:panLeft()},;
  39.             K_CTRL_RIGHT, {|b| b:panRight()},;
  40.             K_CTRL_HOME , {|b| b:panHome()},;
  41.             K_CTRL_END  , {|b| b:panEnd()} }
  42.  
  43.    // Search into array
  44.    nFound := ASCAN( aCursorMethods, nKey )
  45.    IF nFound != 0
  46.       EVAL( aCursorMethods[++nFound], oObj )
  47.  
  48.    ENDIF
  49.    RETURN (nFound != 0)
  50.  
  51. /*****
  52.  *
  53.  * Wait for a key and optionally
  54.  * executes a code block during the
  55.  * wait time.
  56.  *
  57.  */
  58.  
  59. FUNCTION WhatKey( nTime, bBlock )
  60.    LOCAL nKey
  61.    LOCAL i
  62.  
  63.    nTime  := IF(nTime == NIL, 0, nTime)
  64.    bBlock := IF(bBlock == NIL, {|| .F.}, bBlock)
  65.  
  66.    IF nTime == 0  // Wait for a key,
  67.                   // aka INKEY(0)
  68.                   //
  69.       WHILE ((nKey := INKEY(.1)) == 0)
  70.          EVAL(bBlock)
  71.  
  72.       END
  73.       // Key pressed
  74.       RETURN (nKey)
  75.  
  76.    ELSE
  77.       // Time-out option
  78.       i := 0
  79.       WHILE i <= nTime
  80.          IF ((nKey := INKEY(.1)) != 0)
  81.             RETURN (nKey)
  82.  
  83.          ELSE
  84.             EVAL(bBlock)
  85.  
  86.          ENDIF
  87.          i += .1
  88.  
  89.       END
  90.       RETURN (nKey)
  91.  
  92.    ENDIF
  93.    // Dummy!
  94.    RETURN (NIL)
  95.  
  96. /*****
  97.  *
  98.  * Creates a screen shadow
  99.  *
  100.  */
  101.  
  102. FUNCTION Shadow( nTop, nLeft, nBottom, nRight )
  103.    LOCAL nShadowLen, cShadow
  104.    cShadow := SAVESCREEN( nTop, nLeft, nBottom, nRight )
  105.    nShadowLen := LEN(cShadow)
  106.    RESTSCREEN( nTop, nLeft, nBottom, nRight,;
  107.                TRANSFORM(cShadow, REPLICATE("X", nShadowLen)))
  108.    RETURN (NIL)
  109.  
  110. /*****
  111.  *
  112.  * Opens the "Curtain"
  113.  *
  114.  */
  115.  
  116. FUNCTION RestoreCurtain( aScrSave )
  117.    LOCAL i
  118.    FOR i := 0 TO MAXCOL()
  119.       RESTSCREEN( 0, i, MAXROW(), i, aScrSave[i + 1] )
  120.       @  0, i + 1, MAXROW(), i + 1 BOX CHR(176) COLOR "W+/W"
  121.       INKEY(.01)
  122.  
  123.    NEXT
  124.    RETURN (NIL)
  125.  
  126. /*****
  127.  *
  128.  * Stores the "Curtain"
  129.  *
  130.  */
  131.  
  132. FUNCTION SaveCurtain()
  133.    LOCAL i, aMainScr[MAXCOL() + 1]
  134.    FOR i := 0 TO MAXCOL()
  135.       aMainScr[i + 1] := SAVESCREEN( 0, i, MAXROW(), i )
  136.  
  137.    NEXT
  138.    RETURN (aMainScr)
  139.  
  140. /*****
  141.  *
  142.  * Screen Backgrownd
  143.  *
  144.  */
  145.  
  146. FUNCTION PaintScreen()
  147.    LOCAL nMaxCol := MAXCOLUMN
  148.    LOCAL nMaxRow := MAXROW()
  149.    LOCAL i
  150.    // Begin
  151.    DISPBEGIN()
  152.    SETCOLOR(BACKGROUND)
  153.    SCROLL()
  154.    @  0, 0 SAY SPACE(MAXCOLUMN + 1) COLOR FIRSTLINE
  155.    @  0,12 SAY PAGEHEADER COLOR FIRSTLINE
  156.    SETCOLOR(BACKGROUND)
  157.    SCROLL( 3, 3, 19, 77)
  158.    // Background and its "shadows"
  159.    SETCOLOR(ALLBLACK)
  160.    SCROLL( 3, MAXCOLUMN - 1, nMaxRow - 4, MAXCOLUMN - 1)
  161.    SETCOLOR(BACKGROUND)
  162.    @  2,MAXCOLUMN - 1 SAY CHR(220)
  163.    @ nMaxRow - 3, 2 SAY REPLICATE(CHR(223), MAXCOLUMN - 2)
  164.    // Bar 
  165.    SETCOLOR(BARCOLOR)
  166.    @  2, 1 SAY SPACE(MAXCOLUMN - 2)
  167.    SCROLL( 2, 1, nMaxRow - 4, 6)
  168.    FOR i := 1 TO MAXLEN
  169.       @  2 + i, 1 SAY STR( i, 4, 0) + " "
  170.  
  171.    NEXT
  172.    @  2,14 SAY "A" COLOR BARCOLOR
  173.    @  2,25 SAY "B" COLOR BARCOLOR
  174.    @  2,36 SAY "C" COLOR BARCOLOR
  175.    @  2,47 SAY "D" COLOR BARCOLOR
  176.    @  2,58 SAY "E" COLOR BARCOLOR
  177.    @  2,69 SAY "F" COLOR BARCOLOR
  178.    SCROLL( 3, 6, nMaxRow - 4, MAXCOLUMN - 2)
  179.    SETCOLOR(BACKGROUND)
  180.    DISPEND()
  181.    RETURN (NIL)
  182.  
  183. /*****
  184.  *
  185.  * Do you need HELP?
  186.  *
  187.  */
  188.  
  189. FUNCTION NeedHelp( nTime, bBlock )
  190.    LOCAL cScr, cClr
  191.    LOCAL aCont := CreateButtom( 15, 46, "^Continue")
  192.  
  193.    DISPBEGIN()
  194.    cScr := SAVESCREEN( 4, 10, 19, 64)
  195.    Shadow( 5, 12, 18, 64)
  196.    cClr := SETCOLOR("N/W")
  197.    @  4,10 SAY " - " COLOR "W+/N*"
  198.    @  4,13 SAY PADR(" Spreadsheet Info", 50);
  199.                COLOR("N/GR*")
  200.    SCROLL( 5, 10, 17, 62)
  201.    @  6,13 SAY "Supported operators: ( ) + - * /"
  202.    @  8,13 SAY "You should type formulas using LOTUS style:"
  203.    @  9,13 SAY "    D1*A1     D21            B1+E1*C5"
  204.    @ 10,13 SAY "    2+5       (A21+B5)/6     5.3 * 21"
  205.    @ 12,13 SAY "A formula can be up to 30 characters long."
  206.    @ 13,13 SAY "For numeric overflow or invalid formula, ZERO"
  207.    @ 14,13 SAY "will be returned as result."
  208.    SelectButtom(aCont)
  209.    DISPEND()
  210.    // Keep the letters running
  211.    WHILE (WhatKey( nTime , bBlock) == 0)
  212.       // Save your screen!
  213.       ScreenBlanker()
  214.  
  215.    END
  216.    PressButtom(aCont)
  217.    SETCOLOR(cClr)
  218.    RESTSCREEN( 4, 10, 19, 64, cScr)
  219.    RETURN (NIL)
  220.  
  221. /*****
  222.  *
  223.  * "Blanks" the screen
  224.  *
  225.  */
  226.  
  227. FUNCTION ScreenBlanker()
  228.    LOCAL cScr := SAVESCREEN( 0, 0, MAXROW(), MAXCOL() )
  229.    LOCAL cClr := SETCOLOR("N/N")
  230.    LOCAL i := 0
  231.    LOCAL nKey
  232.  
  233.    SCROLL()
  234.    WHILE ((nKey := INKEY(1)) == 0)
  235.       @  i, 0 SAY SPACE(MAXCOL() + 1) COLOR "N/N"
  236.       IF (i == MAXROW())
  237.          i := 0
  238.  
  239.       ENDIF
  240.       @  ++i, 0 SAY PADC( SAVEHEADER, MAXCOL() + 1) ;
  241.                COLOR HEADCLR
  242.  
  243.    END
  244.  
  245.    SETCOLOR(cClr)
  246.    RESTSCREEN( 0, 0, MAXROW(), MAXCOL(), cScr )
  247.    RETURN (nKey)
  248.  
  249. // EOF - MISCSPRD.PRG //
  250.